package MID_Day01._01;

public class Sre02 {
    /*`````````````````````````````````````````````````2024年6月25日`````````````````````````````````````````````````*/
    // history
    /**
     * history命令
     * 注意: 历史命令最多存储1000条 当命令超过1000条时 会自动删除最旧的命令 且序号不会变更
     *      例如第一条命令被顶掉删除后 第二条历史命令的序号不变 仍为2 此时最后一条历史命令的序号为1001 但是总数为1000
     * history: 显示所有历史命令
     * history -c: 清空部分命令
     *   在家路径中有一个隐藏文件: .bash_history 其中存储着历史执行过的命令
     *   需要使用 > .bash_history 将所有历史命令覆盖为空才可完全清除 但是此时清空命令的历史命令已经被记录了
     * !关键字: 执行最后一次以该关键字开头的历史命令
     * !数字: 执行第n条命令历史记录
     */
    // du命令
    /**
     * 多参数命令
     * 作用：统计文件的占用空间
     * du [选项]... [目录或文件]...
     *  -s：只统计每个参数所占用的总空间大小
     *  -h：提供易读容量单位（K、M等
     * 例如: du -sh /home/user/Downloads /home/user/Pictures - 统计/home/user/Downloads和/home/user/Pictures目录下占用的空间大小
     */
    // 时间命令
    /**
     * 详细信息 > 日期和时间 > 时区
     *  date +"%F" 获取当前日期(2024-06-25)
     *  date +"%R" 获取当前时间(00:00)
     *  date +"%R:%S" 获取当前时间(00:00:00)
     * 其他(识记即可):
     *  date +"%Y" 获取当前年份(2024)
     *  date +"%y" 获取当前年份的后两位(24)
     *  date +"%m" 获取当前月份(01-12)
     *  date +"%M" 获取当前分钟(00-59)
     *  date +"%D" 获取当前日期(01-31)
     *  date +"%d" 获取当前日期(1-31)
     * ...
     * 注意: +后不能添加空格
     * 修改时间:
     *  date -s "2024-06-25 00:00:00"
     * 注意: 此处为暴力修改 会导致后续数据传输等多方面的问题 因此需要借助时间工具(时间服务器)解决
     */
    // 用户与组概述
    /**
     * 用户作用:
     *  1.登陆操作系统
     *  2.权限管理/划分
     *   Linux系统中 用户分为三类:
     *      超级管理员: uid默认为0
     *      系统用户: uid默认为1-999
     *      普通用户: uid默认为1000-60000(若要突破60000 需要修改配置文件)
     *   用户的唯一标识: UID 从0开始 默认最大到60000 无负数 用于区分用户权限
     * 组的作用:
     *  方便管理众多的用户 方便对用户进行分类
     *  组的唯一标识: GID (Group ID) 从0开始 默认最大到60000 无负数
     *  组的分类: 基本组 附加组(从属组)
     *      基本组: Linux自己创造的组 与用户同名 系统自动将用户加入
     *      附加组: 管理员自建创建 管理员将用户加入
     *  Linux一个用户必须至少属于一个组
     *      例如: 创建一个用户ZhangSan 默认会创建一个与用户同名的组 并将其放入该组 此组为该用户的基本组
     */
    // 用户创建
    /**
     * /etc/passwd: 专门用于记录用户信息的文件 相当于生活中的户口本
     *  此文件格式较为复杂 使用六个冒号隔开了七个字段:
     *      用户名:密码占位符(x):UID:GID:描述信息:家目录:解释器
     *      /etc/shadow: 专门用于记录用户密码的加密信息 此文件为加密后的密码 该文件普通用户无权访问
     *      解释器: 默认解释器 /bin/bash 为用户将代码语言转义为二进制语言 并将计算机响应的二进制语言转义为代码语言作为响应打印出来
     *      /home/用户名: 用户家目录 /home/为存储用户家目录的根目录
     *      wc: 统计文件行数
     *          1. wc -l: 统计行数 结果显示的数字表示用户数量
     */
    // 查看用户
    /**
     * id 用户名
     *  查看用户信息
     *  可用于判断用户是否存在
     */
    // 新增用户
    /**
     * useradd [选项] 用户名
     * 选项:
     * -u 指定用户id
     * -d 指定家目录路径
     * -s 指定登录解释器(解释器存于/etc/shells路径中 默认为/bin/bash)
     * -G 指定用户附加组
     * -g 指定用户基本组(不常用)
     * 注意: 用户基本组可以作为其他用户的附加组 该用户附加组也可以作为其他用户的基本组
     * 例如: useradd -u 1000 -d /home/user -s /bin/bash -G group1,group2,group3 user1
     *      创建一个用户名为user1的普通用户,密码为空,家目录为/home/user,解释器为/bin/bash,附加组为group1,group2,group3
     */
    // 修改用户属性
    /**
     * 使用usermod命令修改用户属性 (modify)
     *  只能对已有用户进行修改
     * 格式：usermod [选项] 用户
     * 选项:
     *  -u 指定用户id
     *  -d 指定家目录路径
     *  -s 指定登录解释器
     *  -G 指定用户附加组(造作本质为重置附加组)
     */
    // 用户删除
    /**
     * userdel [选项] 用户名
     * 若纯粹删除用户而不做其他操作 除删除此用户外 此用户家目录下的文件不会被删除
     *     查看家目录: ls /home/
     * 选项:
     * -r: 删除用户家目录 及 信箱数据库
     *     邮箱路径为: /var/spool/mail/ 此路径可查看所有已存在用户的邮箱
     *               /var/spool/mail/用户名 通过此路径 可以查看指定用户的邮箱信息
     */
    /*`````````````````````````````````````````````````2024年6月26日`````````````````````````````````````````````````*/
    // 用户密码管理
    /**
     * root用户密码修改:
     *      交互式: passwd 用户名
     *      非交互式: echo "新密码" | passwd --stdin 用户名
     *              其中长选项 --stdin 表示标准化输入
     * 普通用户密码修改:
     *      交互式: passwd
     * 注意: 在交互式命令中 只能由root用户规定"用户名" 普通用户在使用时无法指定用户名 且修改密码时需要先使用su命令切换到该用户
     *      该非交互式命令默认只能由root用户/根用户使用
     */
    /*
        su - 目标用户: 切换用户命令
        exit: 退出当前用户返回root用户
    */
    // 用户初始配置文件
    /**
     * 新建用户: 根据/etc/skel模板目录复制内容至用户家目录下
     * 主要的初始配置文件:
     *   ~/.bash_profile: 每次登录时执行
     *   ~/.bashrc: 每次进入新的bash环境时执行
     *   ~/.bash_logout: 每次退出登录时执行
     * 全局配置文件: /etc/bashrc、/etc/profile
     * 注意: 全局配置优先级高于用户配置
     */
    // 基本权限和归属
    /**
     * Linux中包含2类权限:
     *   1.基本权限(用户拥有下述至少一个权限)
     *      1.1 读取: 允许查看内容-read -> r
     *      1.2 写入: 允许修改内容-write -> w
     *      1.3 可执行: 允许执行和切换-execute -> x
     *   2.特殊权限
     *   TODO 暂未讨论特殊权限
     * 权限可表示为: XX用户对于XX数据 拥有XX权限 可以完成XX操作
     * 对文件的权限:
     *  r: cat less grep head tail vim(无法保存并退出)...
     *  w: vim(可保存并退出) 重定向...
     *  x: 执行文件(配合脚本才有意义)...
     * 对目录的权限:
     *  r: ls...
     *  w: mkdir rmdir touch mv cp rm ln tar unzip...
     *  x: 进入目录 cd...
     *
     * 归属关系:
     *   1.所有者: 文件/目录的拥有者-user -> u
     *   2.所属组: 拥有此文件/目录的组-group -> g
     *   3.其他用户: 除所有者和所属组外的用户-other -> o
     * -rw-r--r--. 1 root root 2670 6月  26 10:06 /etc/passwd
     *      -: 表示该文件为文件             1: 表示文件拥有者id为1(root)
     *      rw-: 表示所有者拥有读写权限      root: 表示文件拥有者名称为root
     *      r--: 表示所属组拥有读权限        2670: 表示文件大小为2670字节
     *      r--: 表示其他用户拥有读权限      6月 26 10:06: 表示文件创建时间
     *        .: 表示文件类型为普通文件      /etc/passwd: 表示文件路径
     */
    // 设置基本权限
    /**
     * 格式: chmod [选项] 归属关系-+=权限类别 文件/目录
     * 选项:
     *  -R: 递归操作 即对该目录下的所有文件/目录进行操作 默认为不递归操作
     * 归属关系:
     *  u: 所有者
     *  g: 所属组
     *  o: 其他用户
     * -+=:
     *  +: 增加权限
     *  =: 覆盖权限
     *  -: 减少权限
     * 权限类别:
     *  r: 读取权限
     *  w: 写入权限
     *  x: 可执行权限
     *  -: 无权限(使用"---"也可以实现无权限设置 但是部分国产化系统不支持"---")
     * 归属关系-+=权限类别:
     *  u+x: 所有者可执行权限
     *  ugo+x: 所有者、所属组、其他用户可执行权限
     *  go=rx: 所属组、其他用户可读可执行权限
     * 注意: 1.不同的权限更改操作之间用逗号分隔 即：u+x,ugo+x,go=rx
     *      2.当普通用户需要对又有权限的目录进行修改时 实质上是修改其上层的树结构 因此需要拥有该目录上层的权限 但是此举非常危险
     *
     * 八进制修改权限:
     *   1.八进制权限: 4: 读 2: 写 1: 执行
     *   2.八进制权限: 7: 读写执行 6: 读执行 5: 写执行 4: 执行 3: 读写 2: 读 1: 写 0: 无
     *   3.八进制权限: 755: 所有者可读可写可执行 所属组可读可执行 其他用户可读可执行
     * 注意: 当使用八进制修改权限时 不能出现类似于"u=755、go=5-"的情况 即: 存在多个权限类别表示方法
     *      同样可以使用 -R 选项 递归操作
     */
    /* ctrl shift t 打开新终端 */
    // 合理权限与不合理权限
    /**
     * 合理权限:
     *   1.文件: rwx rw- r-x r--
     *   2.目录: rwx r-x
     * 部分不合理权限解读:
     *   1.文件: -w- --x
     *   2.目录: r--("又对又错" 既能显示该目录下内容 又会提示无权访问) rw- -w- --x
     */
    // 修改归属
    /**
     * 设置归属关系
     * 格式: chown [选项] 归属关系 文件/目录
     *        chown [-R] 属主 文件/目录
     *        chown [-R] :属组 文件/目录
     *        chown [-R] 属主:属组 文件/目录
     * 选项:
     *  -R: 递归操作
     * 归属关系: 属主 属组
     *  间隔符: ":" 或 "." 都可以 即"属主:属组" "属主.属组"两种方式皆可
     */

    // TODO 补习配置入网参数
    /**
     * IP地址由32个二进制数组成 点分十进制
     * 分类:
     *  1.A类: 0.0.0.0 - 127.255.255.255
     *  2.B类: 128.0.0.0 - 191.255.255.255
     *  3.C类: 192.0.0.0 - 223.255.255.255
     *  4.D类: 224.0.0.0 - 239.255.255.255
     *  5.E类: 240.0.0.0 - 255.255.255.255
     * IP地址包含: 网络位 与 主机位
     *  当网络位相同时 相当于处于同一网段
     *  当主机位相同时 相当于处于同一主机
     * IPv4地址的前三类(A类、B类、C类)网络地址的划分方式及其默认子网掩码:
     *  A类: 网.主.主.主 -> 255.0.0.0
     *  B类: 网.网.主.主 -> 255.255.0.0
     *  C类: 网.网.网.主 -> 255.255.255.0
     */
    /**
     * 1.配置入网参数(IP地址 子网掩码 网关 DNS服务器):
     * 2.
     */
    // 设置VMnet8网络模式
    /**
     * DHCP: 用于网络分发入网参数的服务(IP地址 子网掩码 网关...)
     *  作用域: 192.168.65.1 - 分发哪个网段的地址
     *                 ^
     *             作用域,网段
     *  地址池: 分发作用域中哪些地址
     * NAT地址转换:
     *  IP地址分为: 公网地址: 全球唯一 用于连接互联网
     *            私网地址: 只要不在同一局域网 就可以重复使用
     *  分为两种: 1.静态NAT: 一对一
     *          2.EasyIP: 多对一 将多个不同的私有地址通过路由器转换为同一公网地址连接互联网
     *      路由器: 互联网返回数据时 路由器将数据转发到对应的私网地址 此时私网地址与端口号组合成
     *             路由器可通过私有地址后添加指定端口号区分访问者 将数据精准转发到对应的私网地址
     *      交换机: 组建局域网的必备设备 众多终端通过交换机连接 实现私网互联
     *            交换机再与路由器连接 实现公网互联
     * VMware网络模式
     *  1.隔离模式:
     *      1.1 专门路由器专门负责 该路由器无DHCP服务 仅包含NAT地址转换服务
     *      1.2 虚拟机与宿主机配置同网段 通过同一虚拟交换机与宿主机的对应网卡连接 隔离虚拟机私网与公网的连接 仅允许虚拟机与宿主机之间可以通信
     *  2.NAT模式(地址转换模式):
     *      2.1 专门路由器专门负责 该路由器包含NAT地址转换 默认绑定以太网 以太网用于与公网连接 以及DHCP服务,该服务专门用于分配入网参数
     *  3.桥接模式 TODO 暂未讨论
     */
    /*
        网关: 最近的路由器最近的接口上的IP地址
        路由器: 负责不同网段数据包的转发
        DNS: 域名解析服务器
     */
    /**
     *自动分配入网参数
     *  1.分配IP地址/子网掩码/网关/DNS服务器
     *  2.激活网卡
     *  3.ping 测试
     */
    /*`````````````````````````````````````````````````2024年6月27日`````````````````````````````````````````````````*/
    // SSH远程管理
    /**
     * Telnet: 终端远程连接工具
     *  问题: 传输的数据包为明文 存在安全隐患
     * SSH协议: 安全的远程连接工具
     *  1.为客户提供安全的Shell环境
     *  2.默认端口: TCP 22
     * OpenSSH服务:
     *  1.服务名: sshd -> 命令行服务
     *  2.Linux自动集成 端口号为22
     */
    /*
    SElinux:
     SElinux: 安全增强型防火墙
       分为三种模式:
       1.禁用: 关闭SElinux
       2.强制模式: 严格模式 默认模式
       3.宽容模式: 允许部分访问
     修改模式(临时修改/永久修改):
     永久修改命令与步骤:
       1.vim /etc/selinux/config: 修改SElinux模式
         SELINUX=disabled: 禁用
         SELINUX=enforcing: 强制模式
         SELINUX=permissive: 宽容模式
       2.reboot: 退出后重新进入
       3.getenforce: 查看当前SElinux状态

    ssh
        提供了两种认证方式:
        1.密码认证: 密码认证方式 密码为明文传输
        2.密钥对认证: 密钥对认证方式 密钥为密文传输
                    无密码连接 优先级高于有密码连接
            密钥对: 公钥(证书): 公钥用于加密 - 锁🔒 可以给予多个主机 当拥有对应私钥的主机连接时 自动验证 若访问者无私钥 才会进行密码索要的步骤
                   私钥: 私钥用于解密 - 钥匙🔑 自己保有私钥 用于解锁目标主机的公钥 任何主机拥有此私钥 都可无密码访问拥有与之配对的公钥的主机
            密钥对的配对性无可逆性 即无法通过公钥解密私钥
     */
    // WindTerm远程终端
    /**
     * 在首次安装并使用时，用户需选择一个文件路径。
     * 该路径用途：保存WindTerm的相关文件。
     * 快捷键提示：使用 `Alt + W` 打开设置，`Alt + E` 进行编辑操作。
     *
     * 要实现通过 `rz`（从Windows向WindTerm传输文件）与 `sz`（从WindTerm向Windows传输文件）命令进行文件传输，
     * 请确保已安装 `lrzsz` 插件。
     * 另外，也可直接利用拖放功能完成文件的上传与下载。
     */

}
